Today's network services are becoming more and more complex. In many cases a service is constructed as a chain of independent service functions that follow an ordered sequence of execution. Such service chains are unidirectional in nature, i.e., traffic is forwarded through the chain in a single direction. The forwarding policy for a service chain is carried in the data plane using a service header. The service header is used to specify the service chain details (order of service functions that to be applied to packets, and optionally location/status of these service functions) as well as context information used in the application of the service.
While unidirectional service chains are useful, their current structure is unable to fully satisfy the requirements of stateful Internet Protocol (IP) services. Such services require that traffic be forwarded through the same set of service functions (at the exact same location) in both directions: client-to-server and server-to-client.